extends Node

#Скрипт для хранения запросов для создания таблиц, итпользуемых приложением.
# иницилизация таблиц происходит в DbInitializer.init_tables()

#список таблиц для зачистки перед запуском приложения.
#ВНМ!:в список нужно вносить от зависимых к независимым сверху вниз
const tables_delete_list : Array = [
	"unit",
	"unit_type",
	"catalog_info",
]

# список на иницилизацию таблиц. 
# в список нужно вносить от независимых к зависимым.
const tables_init_list : Dictionary = {
	"catalog_info" : catalog_info_create_table_query,
	"unit_type" : unit_type_create_table_query,
	"unit" : unit_create_table_query
}

const catalog_info_create_table_query := "
	CREATE TABLE IF NOT EXISTS catalog_info (
		alias TEXT UNIQUE NOT NULL,
		decimal_id INTEGER UNIQUE NOT NULL,
		description TEXT
	)"

#таблица групп юнитов.
#в рамках исходного кода именуется категориями
const unit_type_create_table_query := "
	CREATE TABLE IF NOT EXISTS unit_type (
		id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
		decimal_id INTEGER UNIQUE NOT NULL,
		alias TEXT UNIQUE NOT NULL,
		parent_type_id INTEGER,
		description TEXT,

		FOREIGN KEY(parent_type_id) REFERENCES unit_type(id)
	)"
#таблица непосредственно юнитов.
const unit_create_table_query := "
	CREATE TABLE IF NOT EXISTS unit (
		id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
		decimal_id INTEGER UNIQUE NOT NULL,
		alias TEXT UNIQUE NOT NULL,
		parent_type_id INTEGER NOT NULL,
		blueprint_id INTEGER NOT NULL,
		description TEXT,

		FOREIGN KEY(parent_type_id) REFERENCES unit_type(id)
	)"

# ----------------------------------------------------------------------------
# список для иницилизации типов упражнений
#func get_exercises_types_insert_list()  -> Array:
	#var exercises_properties_insert_list : Array =[
		#{ALIAS:"контактные упражнения", 
		#DESCR:"выполнение движений с использованием частей тела (палец, ладонь, колено и стопа)"},
		#{ALIAS:"бесконтактные упражнения", 
		#DESCR:"выполнение движений с использованием нательных датчиков (гиромыши) для проецирования целеуказателей"},
		#{ALIAS:"3D упражнения", 
		#DESCR:""}
	#]
	#return exercises_properties_insert_list
## список для иниилизации упражнений
#func get_exercises_insert_list()  -> Array:
	#logger.info_log("get exercises insert list")
	#const ALIAS := DbInitializer.ALIAS
	#const TYPE_ID := "type_id"
	#var contact_type_id = DbInitializer.get_exercises_type_id("контактные упражнения")
	#var exercises_insert_list : Array = [
		#{ALIAS:"Удержание центра мишени", TYPE_ID:contact_type_id},
		#{ALIAS:"Мультипроекционный тренажер", TYPE_ID:contact_type_id},
		#{ALIAS:"Геотрекинг", TYPE_ID:contact_type_id},
		#{ALIAS:"Трицикл", TYPE_ID:contact_type_id},
		#{ALIAS:"Движение по дуге", TYPE_ID:contact_type_id},
		#{ALIAS:"Обход зигзагообразной линии", TYPE_ID:contact_type_id},
		#{ALIAS:"Архимедова кривая", TYPE_ID:contact_type_id},
		#{ALIAS:"SensoMot", TYPE_ID:contact_type_id},
		#{ALIAS:"Погаси шарик", TYPE_ID:contact_type_id}
	#]
	#return exercises_insert_list
#
## список для иниилизации типов параметров упражнений
#func get_exercises_properties_type_insert_list() -> Array:
	#logger.info_log("get exercises properties type insert list")
	#const ALIAS		:= DbInitializer.ALIAS
	#const DESCR		:= DbInitializer.DESCRIPTION
	#
	#var exercises_properties_type_insert_list : Array = [
##переключатель ожидает в ограничениях данные вида: N:M
##где двоеточие разделяет варианты выбора.
		#{ALIAS:"switch", 
			#DESCR:"Переключатель, имеющий два значения. Или одно или другое."},
##список ожидает в ограничениях данные, которые будут помещены в элементы
##списка, разделённые вертикальной чертой: N|M|X|K|etc..
		#{ALIAS:"list", 
			#DESCR:"Выпадающий список ограниченного небольшого количества значений"},
##поле ввода ожидает в ограничениях данные вида: N-M, 
##Это поле будет использоваться для заполнения 
##плейсхолдера в полях ввода.
		#{ALIAS:"input",
			#DESCR:"Данные, вводимые в произвыольной форме. 
				#Должны проверяться регулярным выражением"},
## в текущей версии игнорирует ограничения.
		#{ALIAS:"color",
			#DESCR:"Палитра цветов."},
##слайдер ожидает в ограничениях данные вида: N:M-X
##где N - минимальное значение, M - максимальное значение,
##X - шаг с которым происходит переход между значениями.
		#{ALIAS:"slider", 
			#DESCR:"Ползунок для регулирования параметра. 
				#В текущей версии работает только с цифрами."},
		#{ALIAS:"slider_with_input", 
			#DESCR:"Ползунок для регулирования параметра 
				#с дополнительным полем для ручного ввода. 
				#Для работы требует регулярное выражение для валидации ввода.
				#Будьте внимательны! Регулярное выражение работает в процессе
				#ввода и если оно нацелено на проверку всего результата без 
				#учёта промежуточных состояний, ввод будет ограничен."}
	#]
	#
	#return exercises_properties_type_insert_list
#
#func get_exercises_properties_insert_list() -> Array:
	#logger.info_log("get exercises properties insert list")
	## const DESCR := DbInitializer.DESCRIPTION
	#var exercises_properties_insert_list : Array = []
#
	#exercises_properties_insert_list.push_back({
			#ALIAS				: "Громкость звукового сигнала", 
			#"exercise_id"		: exerc_id,
			#"property_type_id"	: swi_value_type_id,
			#"regexp"			: "^[0-9]{1,2}$|^[1][0][0]$",
			#"units"				: "%",
			#"restrictions"		: "0-100:1",
			#"default_value"		: "100",
			#"description"		: "Громкость звукового сигнала, сигнализирующего о чём-то важном."
		#})
	#exercises_properties_insert_list.push_back({
			#ALIAS				: "Скорость пульсации центра мишени", 
			#"exercise_id"		: exerc_id,
			#"property_type_id"	: input_value_type_id,
			#"regexp"			: "^[0]\\.[0-9]{1,2}$|^[1]$",
			#"units"				: "гц.",
			#"restrictions"		: "0.01-1",
			#"default_value"		: "0.01",
			#"description"		: "Скорость пульсации центра мишени, от 0.01гц(10 миллигерц) до 1 герца"
		#})
	#exercises_properties_insert_list.push_back({
			#ALIAS				: "Длительность (время) упражнения", 
			#"exercise_id"		: exerc_id,
			#"property_type_id"	: slider_value_type_id,
			#"regexp"			: "^[1-9][0-9]$|^[1-8][0-9]{1,2}$|^[9][0][0]$",
			#"units"				: "сек.",
			#"restrictions"		: "10-900",
			#"default_value"		: "10",
			#"description"		: "Длительность (время) упражнения. От 10 секунд до 15 минут (900 секунд)"
		#})
	#exercises_properties_insert_list.push_back({
			#ALIAS				: "Количество мишеней", 
			#"exercise_id"		: exerc_id,
			#"property_type_id"	: switch_value_type_id,
			#"regexp"			: "",
			#"units"				: "шт.",
			#"restrictions"		: "1:2",
			#"default_value"		: "1",
			#"description"		: "Количество мишеней на поле"
		#})
	#exercises_properties_insert_list.push_back({
			#ALIAS				: "Количество целеуказателей", 
			#"exercise_id"		: exerc_id,
			#"property_type_id"	: switch_value_type_id,
			#"regexp"			: "",
			#"units"				: "шт.",
			#"restrictions"		: "1:2",
			#"default_value"		: "1",
			#"description"		: "Количество целеуказателей на поле"
		#})
	#exercises_properties_insert_list.push_back({
			#ALIAS				: "Время удержания (задержка)", 
			#"exercise_id"		: exerc_id,
			#"property_type_id"	: slider_value_type_id,
			#"regexp"			: "",
			#"units"				: "сек.",
			#"restrictions"		: "0-5:1",
			#"default_value"		: "1",
			#"description"		: "Время удержания (задержка). От 0 до 5 сек"
		#})
	#return exercises_properties_insert_list
